package com.zzw.springboot.mapper;

import com.zzw.springboot.bean.Purchase;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 采购单DAO接口
 */
public interface PurchaseMapper {
    /**
     * 添加采购单
     * @param purchase 采购单信息
     * @return 影响行数
     */
    int insertPurchase(Purchase purchase);

    /**
     * 更新采购单
     * @param purchase 采购单信息
     * @return 影响行数
     */
    int updatePurchase(Purchase purchase);

    /**
     * 删除采购单
     * @param purchaseId 采购单ID
     * @return 影响行数
     */
    int deletePurchase(Integer purchaseId);

    /**
     * 根据ID查询采购单
     * @param purchaseId 采购单ID
     * @return 采购单信息
     */
    Purchase selectPurchaseById(Integer purchaseId);

    /**
     * 查询采购单列表（带条件）
     * @param purchase 查询条件
     * @return 采购单列表
     */
    List<Purchase> selectPurchaseList(Purchase purchase);

    /**
     * 批量删除采购单
     * @param purchaseIds 采购单ID数组
     * @return 影响行数
     */
    int deletePurchaseBatch(Integer[] purchaseIds);

    /**
     * 更新采购单状态
     * @param purchaseId 采购单ID
     * @param status 状态
     * @return 影响行数
     */
    int updatePurchaseStatus(@Param("purchaseId") Integer purchaseId, @Param("status") Integer status);

    /**
     * 更新采购单审批信息
     * @param purchaseId 采购单ID
     * @param approvalUserId 审批人ID
     * @param status 状态
     * @return 影响行数
     */
    int updatePurchaseApproval(@Param("purchaseId") Integer purchaseId,
                              @Param("approvalUserId") Integer approvalUserId,
                              @Param("status") Integer status);

    /**
     * 生成采购单号
     * @param prefix 前缀，例如：PO+年月，如PO202304
     * @return 当日最大序号+1
     */
    String generatePurchaseNo(@Param("prefix") String prefix);
}
